# 离散位置标度现支持通过 palette参数自定义映射规则，
# 打破原有固定整数序列模式，
# 可自由调整轴上的分组间距与排布结构。
ggplot(ToothGrowth, aes(interaction(dose, supp, sep = "\n"), len)) +
  geom_boxplot() +
  scale_x_discrete(palette = scales::pal_manual(values = c(1:3, 5:7))
  )


# 新增continuous.limits参数，
# 允许直接声明离散标度的连续轴范围，
# 轻松实现多图表或分面板的坐标轴同步，
# 确保不同水平数量的图表中元素（如条形宽度）保持一致。
p1 <- ggplot(mpg, aes(class)) +
  geom_bar() +
  facet_wrap(~ drv, ncol = 1, scales = "free_x")
p2 <- p1 +
  scale_x_discrete(continuous.limits = c(1:5))
(p1 + labs(title = "Free limits"))
(p2 + labs(title = "Fixed limits"))

# 使用次要分隔线在视觉上区分层级，以此作为主要分隔线（如中心线）的替代方案。
p1 <- ggplot(mpg, aes(drv, hwy, colour = factor(year))) +
  geom_point(position = "jitterdodge") +
  guides(colour = "none") +
  scale_x_discrete(
    minor_breaks = scales::breaks_width(1, offset = 0.5),
    # To show that the minor axis ticks take on these values
    guide = guide_axis(minor.ticks = TRUE)
  )

p2 <- p1 +
  theme(panel.grid.major.x = element_blank()) +
  theme_sub_axis_bottom(ticks = element_blank(), minor.ticks = element_line())

# 现在可以通过dup_axis()函数来添加次要轴，
# 其主要作用是提供标注信息（例如显示各组的统计摘要），
# 而非用于对齐不同量纲的数据集。
ggplot(mpg, aes(class, cty)) +
  geom_boxplot() +
  scale_x_discrete(
    sec.axis = dup_axis(
      name = "Counts",
      # You can use numeric input for 
      breaks = seq_len(length(unique(mpg$class))),
      # Watch out for order of 'table()` and your levels
      labels = paste0("n = ", table(mpg$class))
    )
  )

